隨著 DevOps 實踐的普及,基礎架構即程式碼 (Infrastructure as Code, IaC) 已成為現代 IT 管理的重要措施。而 Terraform 作為一款跨平台的 IaC 工具,讓我們可以方便地自動化和管理 Kubernetes 叢集中的資源。
Terraform 是一個開源的基礎架構即程式碼 (IaC) 工具,它允許我們使用程式碼來定義、佈署、更新和管理基礎架構資源。與手動配置和維護相比,Terraform 可以讓佈署和管理基礎架構的流程更加自動化,可複用性更高。
主要功能包括:
Terraform 提供了一個統一的介面來定義和管理 Kubernetes 叢集中的所有資源,無論是 Deployment、Service 還是 Namespace,都可以通過程式碼進行管理。以下是幾個使用 Terraform 管理 Kubernetes 的優勢:
在Windows本機環境用 Chocolatey 安裝 Terraform
choco install terraform
安裝完成後,我們可以使用 terraform --version
檢查是否安裝成功。
在專案目錄中創建一個新的目錄,並撰寫 Terraform 配置文件來定義 Kubernetes 資源。
providers.tf:
provider "kubernetes" {
config_path = "~/.kube/config" # 使用本機的 kubeconfig 文件來連接 Kubernetes 叢集
}
main.tf:
resource "kubernetes_namespace" "example-ns" {
metadata {
name = "example-ns"
}
}
resource "kubernetes_deployment" "nginx" {
metadata {
name = "nginx"
namespace = kubernetes_namespace.example-ns.metadata[0].name
}
spec {
replicas = 2
selector {
match_labels = {
app = "nginx"
}
}
template {
metadata {
labels = {
app = "nginx"
}
}
spec {
container {
image = "nginx:latest"
name = "nginx"
port {
container_port = 80
}
}
}
}
}
}
以下是對 main.tf 的說明:
kubernetes_namespace 資源
命名空間(Namespace)用於將 Kubernetes 叢集中的資源進行邏輯隔離。通過將不同應用的資源放在不同命名空間中,可以避免資源名稱的衝突,並提高管理的靈活性。
resource "kubernetes_namespace" "example-ns" {
metadata {
name = "example-ns"
}
}
kubernetes_namespace
來創建一個新的 Kubernetes Namespace。example-ns
。kubernetes_deployment 資源
resource "kubernetes_deployment" "nginx" {
metadata {
name = "nginx"
namespace = kubernetes_namespace.example-ns.metadata[0].name
}
spec {
replicas = 2
selector {
match_labels = {
app = "nginx"
}
}
template {
metadata {
labels = {
app = "nginx"
}
}
spec {
container {
image = "nginx:latest"
name = "nginx"
port {
container_port = 80
}
}
}
}
}
}
nginx
。example-ns
中。使用 kubernetes_namespace.example-ns.metadata[0].name
引用這個命名空間。app = "nginx"
用來指定這些 Pod 屬於 nginx
應用。app = "nginx"
,這裡的標籤會匹配 Deployment 中的 selector。nginx:latest
映像來運行容器。nginx
。container_port
為 80。用途:
初始化 Terraform 工作目錄,並檢查佈署計劃:
terraform init # 初始化 Terraform
terraform plan # 檢查配置
terraform apply # 應用配置
成功佈署後,Terraform 將自動創建指定的 Namespace 和 Deployment,這些資源可以使用 kubectl
命令進行驗證:
kubectl get namespaces
kubectl get deployments -n example-ns
修改 Terraform 配置文件後,再次執行 terraform apply
即可更新資源。
若需刪除資源,則使用 terraform destroy
。
Metadata臺灣又常譯作詮釋資料、後設資料、中介資料、中繼資料,也有人稱元資料、元數據。是指描述其他資料的資訊,例如資料的組織、結構、內容及其屬性。這些資訊有助於管理、發現和理解資料,而非直接包含在資料本身中。可以描述資料的格式、來源、時間戳記等重要特徵,可以有效管理大量資料和提高資料利用率。
「Metadata」在不同領域學科中,因為不同觀點而有不盡相同的解釋與定位,在中文上亦有多種翻譯:
- 詮釋資料:強調對於資料做某種程度的註解,讓使用者瞭解資料內涵(內容物、生產時間等訊息)。
- 元資料、元數據:強調是所有資料的源頭。
- 超資料:在不同Data之間的總綱領,並且期望其可以做到超連結。
- 後設資料:強調是在原始資料產生後才製作的,因為強調事後生產,所以翻譯成後設資料。
透過 Terraform,我們能夠輕鬆管理和自動化 Kubernetes 叢集中的資源佈署。即使在本機的 Docker Desktop Kubernetes 環境中,使用 Terraform 來管理基礎架構仍然能帶來一致性、可複用性和自動化的優勢。隨著基礎架構需求的增長,Terraform 讓 DevOps 團隊能夠更快地進行變更,並確保整體系統的穩定性!